module demo {
	      
   module ntypes {
	     
	   // enum NumberType {NSTRING, NFLOAT};
		
		class MyNumber {
			// NumberType type;
		};
		
		exception MyNumberFormatException {
		   string reason;
		};
		
		class MyNumberString extends MyNumber {
		   string value;
		};
	
		class MyNumberFloat extends MyNumber {
		   float value;
		};
		
	};
	
	module calc	{
	   
      exception DivByZeroException {};
      
	   interface CalcNumber {
	     ["ami"] ntypes::MyNumber add( ntypes::MyNumber x, ntypes::MyNumber y) 
	         throws ntypes::MyNumberFormatException;
	     ["ami"] ntypes::MyNumber mult( ntypes::MyNumber x, ntypes::MyNumber y) 
	         throws ntypes::MyNumberFormatException;
	     ["ami"] ntypes::MyNumber div( ntypes::MyNumber x, ntypes::MyNumber y) 
	         throws ntypes::MyNumberFormatException, DivByZeroException;
	      
	   };
	   
	};

};